/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nys.conci.cliente.bean;

import com.nys.conci.backend.entidad.Identidad;
import com.nys.conci.base.BeanBase;
import com.nys.conci.base.excepcion.ExcepcionManager;
import com.nys.conci.base.utilitario.EtiquetasUtil;
import com.nys.conci.base.utilitario.FechaUtil;
import com.nys.conci.base.utilitario.MensajeUtil;
import com.nys.conci.citas.entidad.ControlCita;
import com.nys.conci.citas.entidad.EstadoCita;
import com.nys.conci.citas.modelo.ModeloCitas;
import com.nys.conci.citas.servicio.ServicioControlCitas;
import com.nys.conci.cliente.entidad.Persona;
import com.nys.conci.usuario.servicio.ServicioAdministracion;
import com.nys.conci.usuario.servicio.ServicioControlUsuario;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

/**
 *
 * @author Yeudy10
 */
@ManagedBean
@ViewScoped
public class BeanExpedienteCliente extends BeanBase {

///<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<     VARIABLES     >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    @Inject
    private ServicioControlUsuario scu;
    @Inject
    private ServicioControlCitas scc;
    @Inject
    private ServicioAdministracion sa;
    @Inject
    private Identidad identidad;
    private List<ModeloCitas> listado_modelo_citas;
    private List<Persona> listado_persona_cliente;
    private Persona persona_cliente_tabla;
    private Persona persona_cliente_select;
    private ModeloCitas modelo_citas_tabla;
    private ModeloCitas modelo_citas_select;    
    private ControlCita cita;
    private String identificacion_u;
    private String dsc_usuario;
    private String identificacion_c;
    private String dsc_cliente;
    private String especialidad;
    private String diagnostico;
    private Date fecha;
    private boolean modificar;
    private boolean habilitar;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<  INICIALIZARORES  >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * Constructor
     */
    public BeanExpedienteCliente() {
        this.inicializar();
    }

    /**
     * Inicializa las variables del bean, al acceder al constructor
     */
    private void inicializar() {
        try {
            habilitar = false;
            modelo_citas_select = new ModeloCitas();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * Inicializas las variables y atributos del bean, despues del llamado del
     * constructor. Es utilizado para las inicializaciones que utilicen datos de
     * objetos injectados.
     */
    @Override
    @PostConstruct
    public void inicializarPost() {
        identificacion_u = identidad.getIdentificacion();
        dsc_usuario = identidad.getNombre();
        cargarClientes();
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      MÉTODOS      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    public void cargarClientes() {
        try {
            setListado_persona_cliente(new ArrayList<Persona>());
            setListado_persona_cliente(scu.consultarPersonasCitas("C"));
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void cargarCitas() {
        try {
            listado_modelo_citas = new ArrayList<ModeloCitas>();
            List<ControlCita> lista = new ArrayList<ControlCita>();
            lista = scc.consultarListaCitasCliente(identificacion_c);
            for (ControlCita controlCita : lista) {
                ModeloCitas modelo = new ModeloCitas();
                modelo.setDscEstado(sa.consultarEstadoCita(controlCita.getId_estado_cita()).getNombre());
                modelo.setDscEspecialidad(sa.consultarEspecialidad(controlCita.getId_especialidad()).getNombre());
                modelo.setId_especialidad(controlCita.getId_especialidad());
                modelo.setFechareal(controlCita.getFechareal());
                modelo.setHora(controlCita.getHora());
                modelo.setId_estado_cita(controlCita.getId_estado_cita());
                modelo.setId_plan_cliente(controlCita.getId_plan_cliente());
                modelo.setIdentificacion_c(controlCita.getIdentificacion_c());
                modelo.setIdentificacion_u(controlCita.getIdentificacion_u());
                modelo.setId_cita(controlCita.getId_cita());
                modelo.setEstado_pago(controlCita.getEstado_pago());
                modelo.setDiagnostico(controlCita.getDiagnostico());
                Persona per_c = scu.consultarPersona(controlCita.getIdentificacion_c());
                if (per_c != null) {
                    modelo.setNombre_cliente(per_c.getNombre() + " " + per_c.getApellido1() + " " + per_c.getApellido2());
                }
                Persona per_u = scu.consultarPersona(controlCita.getIdentificacion_u());
                if (per_u != null) {
                    modelo.setNombre_usuario(per_u.getNombre() + " " + per_u.getApellido1() + " " + per_u.getApellido2());
                }

                listado_modelo_citas.add(modelo);
            }

        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void guardarCita() {
        try {
            if (diagnostico == null || diagnostico.trim().isEmpty()) {
                String mensaje = EtiquetasUtil.obtenerEtiqueta("campo.requerido.parametro", "Diagnostico");
                MensajeUtil.agregarMensajeErrorComponente("form_conci:id_diagnostico", mensaje);
                return;
            }
            modelo_citas_select.setDiagnostico(diagnostico);
            scc.guardarCita(modelo_citas_select.toControlCitas(), true);
            cargarCitas();
            modelo_citas_select = new ModeloCitas();
            modelo_citas_tabla = new ModeloCitas();
            diagnostico = "";
            especialidad = "";
            String mensaje = "Se guardó correctamente la información";
            MensajeUtil.agregarMensajeInfo(mensaje);

        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void limpiarCita() {
        try {
            modificar = false;
            habilitar = false;
            identificacion_u = identidad.getIdentificacion();
            dsc_usuario = identidad.getNombre();
            diagnostico = null;
            dsc_cliente = null;
            identificacion_c = null;
            fecha = null;
            especialidad = null;
            modelo_citas_select = new ModeloCitas();
            modelo_citas_tabla = new ModeloCitas();
            persona_cliente_select = new Persona();
            persona_cliente_tabla = new Persona();
            listado_modelo_citas = new ArrayList<ModeloCitas>();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void seleccionarCliente() {
        try {
            persona_cliente_select = persona_cliente_tabla;           
            identificacion_c = persona_cliente_select.getIdentificacion();            
            dsc_cliente = persona_cliente_select.getNombre() + " " + persona_cliente_select.getApellido1() + " " + persona_cliente_select.getApellido2();
            persona_cliente_select = null;
            persona_cliente_tabla = null;
            cargarCitas();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void seleccionarCita() {
        try {
            modelo_citas_select = modelo_citas_tabla;
            modificar = true;            
            especialidad = modelo_citas_select.getDscEspecialidad();
            fecha = modelo_citas_select.getFechareal();
            diagnostico = modelo_citas_select.getDiagnostico();

            if (FechaUtil.convertirFecha(fecha, "dd/MM/yyyy").equals(FechaUtil.convertirFecha(FechaUtil.obtenerFechaActualDB(), "dd/MM/yyyy"))) {
                habilitar = true;
            } else {
                habilitar = false;
            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      GET & SET      >>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * @return the listado_modelo_citas
     */
    public List<ModeloCitas> getListado_modelo_citas() {
        return listado_modelo_citas;
    }

    /**
     * @param listado_modelo_citas the listado_modelo_citas to set
     */
    public void setListado_modelo_citas(List<ModeloCitas> listado_modelo_citas) {
        this.listado_modelo_citas = listado_modelo_citas;
    }

    /**
     * @return the modelo_citas_tabla
     */
    public ModeloCitas getModelo_citas_tabla() {
        return modelo_citas_tabla;
    }

    /**
     * @param modelo_citas_tabla the modelo_citas_tabla to set
     */
    public void setModelo_citas_tabla(ModeloCitas modelo_citas_tabla) {
        this.modelo_citas_tabla = modelo_citas_tabla;
    }

    /**
     * @return the modelo_citas_select
     */
    public ModeloCitas getModelo_citas_select() {
        return modelo_citas_select;
    }

    /**
     * @param modelo_citas_select the modelo_citas_select to set
     */
    public void setModelo_citas_select(ModeloCitas modelo_citas_select) {
        this.modelo_citas_select = modelo_citas_select;
    }

    /**
     * @return the cita
     */
    public ControlCita getCita() {
        return cita;
    }

    /**
     * @param cita the cita to set
     */
    public void setCita(ControlCita cita) {
        this.cita = cita;
    }

    /**
     * @return the identificacion_u
     */
    public String getIdentificacion_u() {
        return identificacion_u;
    }

    /**
     * @param identificacion_u the identificacion_u to set
     */
    public void setIdentificacion_u(String identificacion_u) {
        this.identificacion_u = identificacion_u;
    }

    /**
     * @return the dsc_usuario
     */
    public String getDsc_usuario() {
        return dsc_usuario;
    }

    /**
     * @param dsc_usuario the dsc_usuario to set
     */
    public void setDsc_usuario(String dsc_usuario) {
        this.dsc_usuario = dsc_usuario;
    }

    /**
     * @return the modificar
     */
    public boolean isModificar() {
        return modificar;
    }

    /**
     * @param modificar the modificar to set
     */
    public void setModificar(boolean modificar) {
        this.modificar = modificar;
    }

    /**
     * @return the habilitar
     */
    public boolean isHabilitar() {
        return habilitar;
    }

    /**
     * @param habilitar the habilitar to set
     */
    public void setHabilitar(boolean habilitar) {
        this.habilitar = habilitar;
    }

    /**
     * @return the persona_cliente_tabla
     */
    public Persona getPersona_cliente_tabla() {
        return persona_cliente_tabla;
    }

    /**
     * @param persona_cliente_tabla the persona_cliente_tabla to set
     */
    public void setPersona_cliente_tabla(Persona persona_cliente_tabla) {
        this.persona_cliente_tabla = persona_cliente_tabla;
    }

    /**
     * @return the persona_cliente_select
     */
    public Persona getPersona_cliente_select() {
        return persona_cliente_select;
    }

    /**
     * @param persona_cliente_select the persona_cliente_select to set
     */
    public void setPersona_cliente_select(Persona persona_cliente_select) {
        this.persona_cliente_select = persona_cliente_select;
    }

    /**
     * @return the identificacion_c
     */
    public String getIdentificacion_c() {
        return identificacion_c;
    }

    /**
     * @param identificacion_c the identificacion_c to set
     */
    public void setIdentificacion_c(String identificacion_c) {
        this.identificacion_c = identificacion_c;
    }

    /**
     * @return the dsc_cliente
     */
    public String getDsc_cliente() {
        return dsc_cliente;
    }

    /**
     * @param dsc_cliente the dsc_cliente to set
     */
    public void setDsc_cliente(String dsc_cliente) {
        this.dsc_cliente = dsc_cliente;
    }

    /**
     * @return the especialidad
     */
    public String getEspecialidad() {
        return especialidad;
    }

    /**
     * @param especialidad the especialidad to set
     */
    public void setEspecialidad(String especialidad) {
        this.especialidad = especialidad;
    }

    /**
     * @return the fecha
     */
    public Date getFecha() {
        return fecha;
    }

    /**
     * @param fecha the fecha to set
     */
    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    /**
     * @return the listado_persona_cliente
     */
    public List<Persona> getListado_persona_cliente() {
        return listado_persona_cliente;
    }

    /**
     * @param listado_persona_cliente the listado_persona_cliente to set
     */
    public void setListado_persona_cliente(List<Persona> listado_persona_cliente) {
        this.listado_persona_cliente = listado_persona_cliente;
    }

    /**
     * @return the diagnostico
     */
    public String getDiagnostico() {
        return diagnostico;
    }

    /**
     * @param diagnostico the diagnostico to set
     */
    public void setDiagnostico(String diagnostico) {
        this.diagnostico = diagnostico;
    }
}
